<?php
/*核心类*/
	/*namespace命名空间*/
	namespace KJ;
	use KJ\Auth;
	/*class类用来创建一个对象，包括属性，方法*/
	class Kj{
		
		/*属性*/
		public static $app;  /*公共静态属性*/
		public $config;		/*公共属性*/
		
		/*方法用函数构造*/
	
		/*__construct()为系统提供的构造函数，在实例化类创建对象时自动执行不需要调用*/
		public function __construct(){
			/*将对象实例绑定到静态属性*/
			static :: $app = $this;	
			/*加载配置文件，将其写入$config属性中*/	
			$this -> config = require CONFIG_PATH;
		}
				
		/*路径解析方法*/
		public function run(){
			header("Content-Type: text/html; charset=utf-8");
			/*打开session函数，为全局变量*/
			session_start();
			
			/*调用router方法*/
			$this->router($_GET);
			
			/*字符串拼接的运行路径写入$path*/
			$path = 'Application\\'.MODULE_NAME . '\\' . 'Controller\\' . CONTROLLER_NAME;
			
			/*字符串拼接的运行路径写入$filename*/
			$filename = './Application/'.MODULE_NAME.'/Controller/'.CONTROLLER_NAME.'.php';
			
			/*is_file() 函数检查指定的文件名是否是正常的文件
			 * 如果文件存在且为正常的文件，则返回 true*/
			 
			/*如果$filename文件不存在或为不正常的文件则输出404*/
			if(!is_file($filename)){
				include './Error/error.html';
				exit;
			}
			
			/*创建输出一个控制器页面*/
			$controller = new $path();
			
			/*将获取的方法写入$action*/
			$action = ACTION_NAME;
			
			/*method_exists检查类的方法是否存在
			 * 如果方法类中已定义，则返回 TRUE，否则返回 FALSE*/
			if(method_exists($controller, $action)){
				/*在$controller控制器中调用$action方法*/
				$controller -> $action();
			}else{
				include './Error/error.html';
			}
			
		}
		
		public function router($get){
			
			/*将配置信息写入$config*/
			$config = $this->config;
			/*判断$module,$controller,$action是否设置，设置了就使用设置的数据，没有就使用默认的数据*/
			$module = isset($get[$config['VAR_MODULE']]) ? $get[$config['VAR_MODULE']] : 'home';
			$controller = isset($get[$config['VAR_CONTROLLER']]) ? $get[$config['VAR_CONTROLLER']] : 'index';
			$action = isset($get[$config['VAR_ACTION']]) ? $get[$config['VAR_ACTION']] : 'index';
						 
			 /*define()函数定义一个常量*/
			 /*将$module,$controller的值定义为首字母大写其余字母小写的常量，$action的值为字母小写的常量*/
			define('MODULE_NAME',ucfirst(strtolower($module)));   		/*strtolower 字母小写 	ucfirst 首字母大写*/
			define('CONTROLLER_NAME',ucfirst(strtolower($controller))); 
			define('ACTION_NAME',strtolower($action)); 
		}
	}
?>